package com.zwps.biz.domain.service;

import com.zwps.biz.api.model.dto.auth.PasswordLoginAuthDTO;
import com.zwps.biz.api.model.dto.user.AddUserDTO;
import com.zwps.biz.api.model.dto.user.SelectUserDTO;
import com.zwps.biz.api.model.dto.user.UpdateUserDTO;
import com.zwps.biz.api.model.vo.auth.AuthInfoVO;
import com.zwps.biz.api.model.vo.permission.page.PagePermissionTreeVO;
import com.zwps.biz.api.model.vo.user.UserVO;
import com.zwps.common.api.model.vo.PageInfoVO;

import java.util.List;
import java.util.Set;

/**
 * 系统用户
 * @ClassName: UserService
 * @Description: 
 * @author lyh
 * @date 2023年5月23日 上午10:27:10
 *
 */
public interface UserService {

    boolean exist(String id);
    
    void addUser(AddUserDTO dto);

    void deleteUsers(String ids);

    void updateUser(String id, UpdateUserDTO dto);

    PageInfoVO<UserVO> selectUserPage(SelectUserDTO dto);

    /**
     * 获取指定用户通过系列权限返回可查看的用户ID列表
     * @Title: getDataSopeUserIds
     * @Description: 
     * @param userId
     * @return Set<String>
     * @author lyh
     * @date 2023年5月26日 下午4:25:41
     */
    Set<String> getDataSopeUserIds(String userId);

    void resetPassWord(String id);

    void setUpStatus(String id);

    /**
     * 获取所有用户信息
     * @param filtration 是否过滤（默认：过滤，当不为空时不过滤）
     * @return
     */
    List<UserVO> selectAllUser(String filtration);
    
    /**
     * 查找登录用户的页面权限树
     * @Title: byLoginedUserFindPagePermissionTree
     * @Description: 
     * @return List<PagePermissionTreeVO>
     * @author lyh
     * @date 2023年8月15日 上午11:39:53
     */
    List<PagePermissionTreeVO> byLoginedUserFindPagePermissionTree();
    
    /**
     * 查找指定用户的页面权限树
     * @Title: byUserIdFindPagePermissionTree
     * @Description: 
     * @param userId
     * @return List<PagePermissionTreeVO>
     * @author lyh
     * @date 2023年8月15日 上午11:41:50
     */
    List<PagePermissionTreeVO> byUserIdFindPagePermissionTree(String userId);

    /**
     * 用户详情接口
     * @param userId
     * @return
     */
    UserVO getUserInfoById(String userId);
    /**
     * 根据姓名查询所属用户id
     * @param userName
     * @return
     */
    List<String> getUserInfoByLikeUserName(String userName);

    AuthInfoVO getCurrentUserInfor();

    /**
     * 提供第三方登录是用密钥
     * @return 密钥（双重Md5加密后密钥）
     */
    String loginSecretKey(PasswordLoginAuthDTO loginDTO);

}
